values: RefCell<HashMap<String, ConfigValue>>,
values_loaded: Cell<bool>,
cwd: PathBuf,
- rustc: RefCell<Option<PathBuf>>,
rustdoc: RefCell<Option<PathBuf>>,
target_dir: RefCell<Option<Filesystem>>,
extra_verbose: Cell<bool>,
cwd: cwd,
values: RefCell::new(HashMap::new()),
values_loaded: Cell::new(false),
- rustc: RefCell::new(None),
rustdoc: RefCell::new(None),
target_dir: RefCell::new(None),
extra_verbose: Cell::new(false),
}
pub fn rustc(&self) -> CargoResult<Ref<Path>> {
- if self.rustc.borrow().is_none() {
- *self.rustc.borrow_mut() = Some(try!(self.get_tool("rustc")));
- }
- Ok(Ref::map(self.rustc.borrow(), |opt| opt.as_ref().map(AsRef::as_ref).unwrap()))
+ let rustc = try!(self.rustc_info());
+ Ok(Ref::map(rustc, |r| r.path.as_ref()))
}
pub fn rustdoc(&self) -> CargoResult<Ref<Path>> {
pub fn rustc_info(&self) -> CargoResult<Ref<Rustc>> {
if self.rustc_info.borrow().is_none() {
- let path = try!(self.rustc());
- *self.rustc_info.borrow_mut() = Some(try!(Rustc::new(&*path)));
+ let path = try!(self.get_tool("rustc"));
+ *self.rustc_info.borrow_mut() = Some(try!(Rustc::new(path)));
}
Ok(Ref::map(self.rustc_info.borrow(), |opt| opt.as_ref().unwrap()))
}
-use std::path::Path;
+use std::path::PathBuf;
use util::{self, CargoResult, internal, ChainError};
pub struct Rustc {
+ pub path: PathBuf,
pub verbose_version: String,
pub host: String,
/// Backwards compatibility: does this compiler support `--cap-lints` flag?
///
/// If successful this function returns a description of the compiler along
/// with a list of its capabilities.
- pub fn new<P: AsRef<Path>>(path: P) -> CargoResult<Rustc> {
- let mut cmd = util::process(path.as_ref());
+ pub fn new(path: PathBuf) -> CargoResult<Rustc> {
+ let mut cmd = util::process(&path);
cmd.arg("-vV");
let mut first = cmd.clone();
};
Ok(Rustc {
+ path: path,
verbose_version: verbose_version,
host: host,
cap_lints: cap_lints,